{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "2    python爬虫技术   李宁     NaN   79.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "6          深度学习   伊恩     NaN  152.0\n",
      "7           NaN  NaN     NaN    NaN\n",
      "8        人工智能简史   尼克  2017.0   24.0\n"
     ]
    }
   ],
   "source": [
    "# 导入pandas包\n",
    "import pandas as pd\n",
    "data_path=\"handle.csv\"\n",
    "# 解析数据\n",
    "data = pd.read_excel(data_path)\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Empty DataFrame\n",
      "Columns: []\n",
      "Index: [0, 1, 2, 3, 4, 5, 6, 7, 8]\n",
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "8        人工智能简史   尼克  2017.0   24.0\n"
     ]
    }
   ],
   "source": [
    "#  按列删除\n",
    "new_data= data.dropna(axis=1)\n",
    "print(new_data)\n",
    "\n",
    "#  按行删除\n",
    "new_data= data.dropna(axis=0)\n",
    "print(new_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "2    python爬虫技术   李宁     NaN   79.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "6          深度学习   伊恩     NaN  152.0\n",
      "8        人工智能简史   尼克  2017.0   24.0\n"
     ]
    }
   ],
   "source": [
    "new_data= data.dropna(axis=0,how=\"all\")\n",
    "print(new_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "2    python爬虫技术   李宁     ###   79.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "6          深度学习   伊恩     ###  152.0\n",
      "7           ###  ###     ###    ###\n",
      "8        人工智能简史   尼克  2017.0   24.0\n"
     ]
    }
   ],
   "source": [
    "# 1. 直接设置 value 指定填充的内容\n",
    "new_data= data.fillna(\"###\")\n",
    "print(new_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "2    python爬虫技术   李宁  2019.0   79.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "6          深度学习   伊恩  2017.0  152.0\n",
      "7        人工智能简史   尼克  2017.0   24.0\n",
      "8        人工智能简史   尼克  2017.0   24.0\n"
     ]
    }
   ],
   "source": [
    "# 2.  纵向填充\n",
    "new_data= data.fillna(method=\"bfill\")\n",
    "print(new_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "2    python爬虫技术   李宁    79.0   79.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "6          深度学习   伊恩   152.0  152.0\n",
      "7           NaN  NaN     NaN    NaN\n",
      "8        人工智能简史   尼克  2017.0   24.0\n"
     ]
    }
   ],
   "source": [
    "# 用横向的值填充，如果横向没有值则不填充。\n",
    "new_data= data.fillna(axis=1,method=\"bfill\")\n",
    "print(new_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者    出版日期     价格\n",
      "0  python从入门到实战  埃里克  2020.0   85.0\n",
      "1    python数据分析  丹尼尔  2020.0   80.0\n",
      "2    python爬虫技术   李宁  2019.0   79.0\n",
      "3    疯狂python讲义   李刚  2019.0  113.0\n",
      "4         大数据处理  石宣化  2018.0   43.0\n",
      "5          人工智能  史蒂芬  2018.0   97.0\n",
      "6          深度学习   伊恩  2017.0  152.0\n",
      "7        人工智能简史   尼克  2017.0   24.0\n",
      "8        人工智能简史   尼克  2017.0   24.0\n",
      "0    False\n",
      "1    False\n",
      "2    False\n",
      "3    False\n",
      "4    False\n",
      "5    False\n",
      "6    False\n",
      "7    False\n",
      "8     True\n",
      "dtype: bool\n",
      "0    False\n",
      "1     True\n",
      "2    False\n",
      "3     True\n",
      "4    False\n",
      "5     True\n",
      "6    False\n",
      "7     True\n",
      "8     True\n",
      "dtype: bool\n"
     ]
    }
   ],
   "source": [
    "# 4. limit 指定连续三个 NaN 这里按列的方向 填充的数量\n",
    "new_data= data.fillna(axis=0,method=\"bfill\",limit=2)\n",
    "print(new_data)\n",
    "\n",
    "# 重复值\n",
    "print(new_data.duplicated())\n",
    "\n",
    "# 按列重复\n",
    "print(new_data.duplicated(subset=\"出版日期\"))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.1"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "d6ee8951ea1f1e54d5c6db37d467cbab5e82ba9505f1ada5124c3f7e97e9c192"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
